package com.future.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import lombok.Data;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import java.util.List;


@TableName("sys_user")
@Data
public class User implements Serializable, UserDetails{
    private static final long serialVersionUID = 1L;
    /**
     * 用户编号
     */
    //MyBatis-Plus 的注解来定义数据库表中的主键字段：value 指定主键字段的名称，type 指定主键的类型
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 登录名称(用户名)
     */
    private String username;
    /**
     * 登录密码
     */
    private String password;
    /**
     * 真实姓名
     */
    private String realName;
    /**
     * 昵称
     */
    private String nickName;
    /**
     * 所属部门ID
     */
    private Long departmentId;
    /**
     * 所属部门名称
     */
    private String departmentName;
    /**
     * 性别(0-男，1-女)
     */
    private Integer gender;
    /**
     * 电话
     */
    private String phone;
    /**
     * 用户头像
     */
    private String avatar;
    /**
     * 邮箱
     */
    private String email;
    /**
     * 是否是管理员(1-管理员)
     */
    private Integer isAdmin;
    /**
     * 创建时间
     */
    private Date createTime;
    /**
     * 修改时间
     */
    private Date updateTime;
    /**
     * 是否删除(0-未删除，1-已删除)
     */
    private Integer isDelete;
    /**
     * 帐户是否过期(1 未过期，0已过期)
     */
    private boolean isAccountNonExpired = true;
    /**
     * 帐户是否被锁定(1 未过期，0已过期)
     */
    private boolean isAccountNonLocked = true;
    /**
     * 密码是否过期(1 未过期，0已过期)
     */
    private boolean isCredentialsNonExpired = true;
    /**
     * 帐户是否可用(1 可用，0 删除用户)
     */
    private boolean isEnabled = true;
    /**
     * 权限列表
     */
    //表示该字段并不会映射到数据库表中的任何列。
    @TableField(exist = false)
    Collection<? extends GrantedAuthority> authorities;
    /**
     * 查询用户权限列表
     */
    @TableField(exist = false)
    private List<Permission> permissionList;
}

